<?php

/**
 * $servicios actions.
 *
 * @package    cronos-doctrine
 * @subpackage $servicios
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class serviciosActions extends sfActions
{
  public function executeIndex(sfWebRequest $request)
  {
    
      $this->num = $request->getParameter('num');
      $this->servicio_tipo = $request->getParameter('servicio_tipo');
      $this->getUser()->setAttribute('servicio_tipo', $request->getParameter('servicio_tipo'));
      
      $categorias = new Categoria();
      $this->categorias = $categorias->getCategoria();
      
      $marcas = new Marca();
      $this->marcas = $marcas->getMarca();
      
      
  }

public function executeParcial(sfWebRequest $request)
  {
    
    
      $this->categoria_id = $request->getParameter('categoria_id');
      $this->marca_id = $request->getParameter('marca_id');
      
      $this->nombre   = $request->getParameter('nombreProducto');
      $this->num = $request->getParameter('num');
      $this->servicio_tipo = $this->getUser()->getAttribute('servicio_tipo');
      
      $producto = new Producto();
      $this->productos = $producto->getProductosInfoBusq($this->getUser()->getAttribute('servicio_tipo'),$this->categoria_id,$this->marca_id,$this->nombre);
      
      $categorias = new Categoria();
      $this->categorias = $categorias->getCategoria();
      
      $marcas = new Marca();
      $this->marcas = $marcas->getMarca();
      
      
      
      
  }
   

  
  
  public function executeNew(sfWebRequest $request)
  {
    
    $this->servicio_tipo = $request->getParameter('servicio_tipo');
    
    $this->getUser()->setAttribute('servicio_tipo', $this->servicio_tipo);
    $this->empresa_id = $this->getUser()->getAttribute('agente_user_empresa_id');
    
    $this->form = new ProductoForm();
    $this->form->setWidget('tipo_id', new sfWidgetFormInputHidden(array(),array('value' => $this->servicio_tipo)));
    
    $tamano = new Tamano();
    $this->tamano = $tamano->getTamano();
    
    
//$this->tipo = strtolower(substr($producto->getTipo(), 0, -1));
    
    
  }

  public function executeCreate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod(sfRequest::POST));

    
    $this->form = new ProductoForm();

    $this->processForm($request, $this->form);
    $this->empresa_id = $this->getUser()->getAttribute('agente_user_empresa_id');
    $this->servicio_tipo = $this->getUser()->getAttribute('servicio_tipo');
    
    $this->setTemplate('new');
  }

  public function executeEdit(sfWebRequest $request)
  {
    
    $this->forward404Unless($producto = Doctrine_Core::getTable('Producto')->find(array('id'=>$request->getParameter('id'))), sprintf('Object producto does not exist (%s).', $request->getParameter('id')));
    
    $this->servicio_tipo = $this->getUser()->getAttribute('servicio_tipo');
    
    $this->form = new ProductoForm($producto);
    $this->servicio_tipo = $producto->getTipoId();
    $this->empresa_id = $this->getUser()->getAttribute('agente_user_empresa_id');
    
    $this->form->setWidget('tipo_id', new sfWidgetFormInputHidden(array(),array('value' => $producto->getTipoId())));
    //para diferenciar entre un servicio / producto
    $this->tipo = strtolower(substr($producto->getTipo(), 0, -1));
    
    
    
      
  }

  public function executeUpdate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));
    $this->forward404Unless($producto = Doctrine_Core::getTable('Producto')->find(array($request->getParameter('id'))), sprintf('Object sf_guard_user does not exist (%s).', $request->getParameter('id')));
    $this->form = new ProductoForm($producto);
    $this->processForm($request, $this->form);
    
    $this->servicio_tipo = $producto->getTipoId();
    $this->empresa_id = $this->getUser()->getAttribute('agente_user_empresa_id');
    $this->tipo = strtolower(substr($producto->getTipo(), 0, -1));

    $this->setTemplate('edit');
    
  }

  public function executeDelete(sfWebRequest $request)
  {
    $request->checkCSRFProtection();

    $this->forward404Unless($producto = Doctrine_Core::getTable('Producto')->find(array($request->getParameter('id'))), sprintf('Object sf_guard_user does not exist (%s).', $request->getParameter('id')));
    $servicio_tipo = $producto->getTipoId();
    $producto->delete();

    $this->redirect('servicios/index?servicio_tipo='.$servicio_tipo);
  }

  protected function processForm(sfWebRequest $request, sfForm $form)
  {
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {
      
      try {
        $producto = $form->save();
        
        foreach ( $request->getParameter('imagen') as $imagen){
        $imagen = strtolower(preg_replace('/[^\w\._]+/', '', $imagen));
        
        $archivos = new Archivo();
        $archivos->setProducto($producto);
        $archivos->setNombre($imagen);
        $archivos->setArchivoEtiquetaId(1);
        $archivos->save();
        
                                         
         $targetDir = sfConfig::get('sf_upload_dir').'/productos/';
         $fileMode = 0766;                                     
         chmod($targetDir."".$imagen, $fileMode);
         chmod($targetDir."s_".$imagen, $fileMode);
         chmod($targetDir."g_".$imagen, $fileMode);
         
    }
      
      
      } catch (Doctrine_Validator_Exception $e) {

        $errorStack = $form->getObject()->getErrorStack();

        $message = get_class($form->getObject()) . ' has ' . count($errorStack) . " field" . (count($errorStack) > 1 ?  's' : null) . " with validation errors: ";
        foreach ($errorStack as $field => $errors) {
            $message .= "$field (" . implode(", ", $errors) . "), ";
        }
        $message = trim($message, ', ');

        $this->getUser()->setFlash('error', $message);
        return sfView::SUCCESS;
      }

      $this->redirect('servicios/edit?id='.$producto->getId());
    }
  }
  

  
  public function executeAddPreForm(sfWebRequest $request)
  {
      
      $this->forward404unless($request->isXmlHttpRequest());
      $number = intval($request->getParameter("num"));
      $servicio_tipo = $request->getParameter('servicio_tipo');
      
      $prod = $producto = Doctrine_Core::getTable('Producto')->find($request->getParameter('id'));
      if(!is_null($prod)){
            $form = new ProductoForm($producto);
      }else{
            $form = new ProductoForm();
      }

      $form->addPrecio($number);
      return $this->renderPartial('addPre',array('form' => $form, 'num' => $number,'servicio_tipo'=>$servicio_tipo));
  }
  
  public function executeDelPre(sfWebRequest $request)
  {
    $this->forward404Unless($producto_precio = Doctrine_Core::getTable('ProductoPrecio')->find(array($request->getParameter('id'))), sprintf('Object sf_guard_user does not exist (%s).', $request->getParameter('id')));
    $producto_precio->delete();
    
    $this->servicio_tipo = $request->getParameter("servicio_tipo");
    $producto = Doctrine_Core::getTable('Producto')->find($producto_precio->getProductoId());
    $this->form = new ProductoForm($producto);
    
    
  }
  
    public function executeDeleteImagen(sfWebRequest $request)
  {
    

    $this->forward404Unless($archivo = Doctrine_Core::getTable('Archivo')->find(array($request->getParameter('id'))), sprintf('Object galeria does not exist (%s).', $request->getParameter('id')));
    
    try {
           $archivo->delete();
           $this->getUser()->setFlash('notice', 'El Item fué removido exitosamente.'); 
          
      } catch (Doctrine_Exception $e) {
          $this->getUser()->setFlash('error', 'No se puedo eliminar el item, existen referencias a esta entrada.'); 
          return sfView::SUCCESS;
      }
      return sfView::SUCCESS;
  }
  
  
  public function executeUpload(sfWebRequest $request)
  {
    
  }
  

  
  
}
